-- data SALA
import IO
import Char
import System.Directory
import System.Time
import System.Locale
import System.Environment






sciezkaSale = "c:/sale.txt"
sciezkaRezerwacja = "c:/rezerwacje.txt"
sciezkaSprzedaz = "c:/sprzedaz.txt"
sciezkaSeanse = "c:/seanse.txt"
tempSciezka = "c:/temp.txt"

checkDirectory = do {
					result <- doesFileExist sciezkaSale;
					--putStrLn $show result;
					
					if((show result) == "True") then do {
						putStrLn "";

						
					}
					else do{
						handler <- openFile sciezkaSale WriteMode;
						hClose handler;
						handler <- openFile sciezkaRezerwacja WriteMode;
						hClose handler;
						handler <- openFile sciezkaSprzedaz WriteMode;
						hClose handler;
						handler <- openFile sciezkaSeanse WriteMode;
						hClose handler;
						handler <- openFile tempSciezka WriteMode;
						hClose handler;
						
						putStrLn "Tworze pliki na C:/ \n";
						putStrLn $sciezkaSale ++ "\n";
						putStrLn $sciezkaRezerwacja ++ "\n";
						putStrLn $sciezkaSprzedaz ++ "\n";
						putStrLn $sciezkaSeanse ++ "\n";
						putStrLn $tempSciezka ++ "\n";
					
					}
				}


-----------------------------------------------------
----------------- GUI handler -----------------------
-----------------------------------------------------	

--main :: IO ()
main = doMain
doMain =  do{
					checkDirectory;
					putStrLn "\nSale: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " a) dodaj \t  b) modyfikuj \t  c) usun \t  d) wyswietl \t ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn "Seanse: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " g) dodaj \t  h) modyfikuj \t  i) usun \t  j) wyswietl \t ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn "Rezerwacje: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " k) dodaj \t  l) usun \t";
					putStrLn "--------------------------------------------------------------------------";
           		 	putStrLn "Sprzedaz: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " m) dodaj \t  n) usun \t";
					putStrLn "--------------------------------------------------------------------------";
					putStrLn "Przegladanie seansow: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " z) miesieczne \t  x) dniowe \t";
					putStrLn "--------------------------------------------------------------------------";
					putStrLn "Raport sprzedazy: ";
            		putStrLn "--------------------------------------------------------------------------";
            		putStrLn " v) miesieczny \t  s) roczne \t";
					putStrLn "--------------------------------------------------------------------------";
					putStrLn " WYJSCIE Z PROGRAMU (w): ";
            		putStrLn "--------------------------------------------------------------------------";

					
					handler <- openFile tempSciezka WriteMode;
					hClose handler;
					n <- getLine;
				case n of
					"a" -> do{
							putStrLn "Podaj nazwe sali";
							nazwa <- getLine;
							putStrLn "Podaj ilosc rzedow";
							rows <- getLine;
							wynik <- return(jestLiczba rows);
							wynik2 <- return(jestWiekszeOd0 rows);
							if (( wynik == True)&&( wynik2 == True)) then do {
								putStrLn "Podaj ilosc miejsc ";
								cols <- getLine; 
								wynik <- return(jestLiczba cols);
								wynik2 <- return(jestWiekszeOd0 cols);
								if (( wynik == True)&&( wynik2 == True)) then do {
									putStrLn "dane ok";
									dodajRekordSale sciezkaSale rows cols nazwa;
									doMain;
								}
								else do {
									putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
									temp <- getLine;
									doMain;
								}
							}
							else  do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
                		}
					"b" -> do{
							putStrLn "Dostepne sale kinowe:\n";
							wyswietlSale;
							putStrLn "\nPodaj ID sali do modyfikacji..";
							idsali <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaSale idsali);
							if (check=="yes") then do {
								putStrLn "Podaj nazwe sali";
								nazwa <- getLine;
								putStrLn "Podaj ilosc rzedow";
								rows <- getLine;
								wynik <- return(jestLiczba rows);
								wynik2 <- return(jestWiekszeOd0 rows);
								if (( wynik == True)&&( wynik2 == True)) then do {
									putStrLn "Podaj ilosc miejsc ";
									cols <- getLine; 
									wynik <- return(jestLiczba cols);
									wynik2 <- return(jestWiekszeOd0 cols);
									if (( wynik == True)&&( wynik2 == True)) then do {
										modyfukujWpis sciezkaSale tempSciezka idsali nazwa rows cols;
										putStrLn "Sala zmodyfikowana!";
										--- tutaj modyfikacja / dane: idsali->(nazwa rows cols)
										
										temp <- getLine;
										doMain;
									}
									else do {
										putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
										temp <- getLine;
										doMain;
									}
								}
								else do {
										putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
										temp <- getLine;
										doMain;
								}
							}
							else  do {
								putStrLn "Taka sala nie istnieje!";
								temp <- getLine;
								doMain;
							}
                		}
					"c" -> do{
							putStrLn "Dostepne sale kinowe:\n";
							wyswietlSale;
							putStrLn "\nPodaj ID sali do usuniecia..";
							idsali <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaSale idsali);
							
							if (check=="yes") then do {
								-- tutaj
								doDelete sciezkaSale tempSciezka idsali;
								putStrLn "Sala usunieta!";
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Taka sala nie istnieje!";
								temp <- getLine;
								doMain;	
							}
                		}
					"d" -> do{
							wyswietlSale;
							temp <- getLine;
							doMain;			
                		}
					"g" -> do{
							putStrLn "Podaj nazwe Filmu";
							nazwa <- getLine;
							putStrLn "Dostepne sale kinowe:\n";
							wyswietlSale;
							putStrLn "\nPodaj ID sali";
							idsali <- getLine;
							
							check <- (sprawdzCzyIDIstnieje sciezkaSale idsali);
							
							wynik <- return(jestLiczba idsali);
							wynik2 <- return(jestWiekszeRowne0 idsali);
							if (( wynik == True)&&( wynik2 == True)&&(check=="yes")) then do {
								putStrLn "Podaj date w formacie YYYYmmDDhhMM ";
								dataSeansu <- getLine; 
								today <- zwrocDate;
								if (((length dataSeansu) == 12)&&(sprawdzDate dataSeansu today)&&(sprawdzMozliwosc dataSeansu)) then do {
									putStrLn "dane ok";
									-- tutaj 
									dodajRekordSeans sciezkaSeanse idsali nazwa dataSeansu;
									doMain;
								}
								else do {
									putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
									temp <- getLine;
									doMain;
								}
							}
							else  do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}	
                		}
					"h" -> do{
						putStrLn "Dostepne seanse:\n";
						wyswietlSeanse;
						putStrLn "\nPodaj ID seansu do modyfikacji..";
						idseansu <- getLine;
						check <- (sprawdzCzyIDIstnieje sciezkaSeanse idseansu);
							
						if (check=="yes") then do {
							putStrLn "Podaj nazwe Filmu";
							nazwa <- getLine;
							putStrLn "Dostepne sale kinowe:\n";
							wyswietlSale;
							putStrLn "\nPodaj ID sali";
							idsali <- getLine;

							check <- (sprawdzCzyIDIstnieje sciezkaSale idsali);

							wynik <- return(jestLiczba idsali);
							wynik2 <- return(jestWiekszeRowne0 idsali);
							if (( wynik == True)&&( wynik2 == True)&&(check=="yes")) then do {
								putStrLn "Podaj date w formacie YYYYmmDDhhMM ";
								dataSeansu <- getLine; 
								today <- zwrocDate;
								if (((length dataSeansu) == 12)&&(sprawdzDate dataSeansu today)&&(sprawdzMozliwosc dataSeansu)) then do {
									putStrLn "dane ok";
									-- tutaj modyfikacja / dane:	idseansu->(idsali nazwa dataSeansu)
									modyfukujWpis sciezkaSeanse tempSciezka idseansu idsali nazwa dataSeansu;
									putStrLn "Seans zmodyfikowany!";
									temp <- getLine;
									doMain;
								}
								else do {
									putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
									temp <- getLine;
									doMain;
								}
							}
							else  do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
						}
						else  do {
								putStrLn "Wybrany seans nie istnieje!";
								temp <- getLine;
								doMain;
						}
                	}
					"i" -> do{
							putStrLn "Dostepne seanse:\n";
							wyswietlSeanse;
							putStrLn "\nPodaj ID seansu do usuniecia..";
							idsali <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaSeanse idsali);
							
							if (check=="yes") then do {
								-- tutaj
								doDelete sciezkaSeanse tempSciezka idsali;
								putStrLn "Seans usuniety!";
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Taki seans nie istnieje!";
								temp <- getLine;
								doMain;	
							}
                		}
					"j" -> do{
							wyswietlSeanse;
							temp <- getLine;
							doMain;			
                		}
					"k" -> do{
							putStrLn "Dostepne seanse:\n";
							wyswietlSeanse;
							putStrLn "\nPodaj ID seansu";
							idSeansu <- getLine;
							wyswietlRezerwacjeSeansuNaEkran sciezkaRezerwacja idSeansu;	
							check <- (sprawdzCzyIDIstnieje sciezkaSeanse idSeansu);
							if ( check == "yes" ) then do {
								putStrLn "Podaj rzad:";
								rows <- getLine;
								putStrLn "Podaj miejsce:";
								cols <- getLine;
								wynik <- return(jestLiczba rows);
								wynik2 <- return(jestWiekszeOd0 rows);
								wynik3 <- return(jestLiczba cols);
								wynik4 <- return(jestWiekszeOd0 cols);
								
								check2 <- (sprawdzCzyMiejsceIstnieje sciezkaSeanse idSeansu rows cols);
								check <- (sprawdzCzyMiejsceZajete sciezkaRezerwacja idSeansu rows cols);
								if (( wynik == True)&&( wynik2 == True)&&( wynik3 == True)&&( wynik4 == True)&&(check2=="yes")) then do {
									if( check=="no" ) then do {
										putStrLn "dane ok";
										dodajRekordRezerwacja sciezkaRezerwacja idSeansu rows cols;
										temp <- getLine;
										doMain;
									}
									else do {
										putStrLn "Podane miejsce jest juz zarezerwowane!";
										temp <- getLine;
										doMain;
									}
								}
								else do {
										putStrLn "Podane miejsce nie istnieje!";
										temp <- getLine;
										doMain;
								}
							}
							else do {
								putStrLn "Taki seans nie istnieje!";
								temp <- getLine;
								doMain;	
							}	
                		}
					"l" -> do{
								
							putStrLn "Dostepne rezerwacje:\n";
							wyswietlRezerwacje;
							putStrLn "\nPodaj ID rezerwacji do usuniecia..";
							idrez <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaRezerwacja idrez);
							
							if (check=="yes") then do {
								-- tutaj
								doDelete sciezkaRezerwacja tempSciezka idrez;
								putStrLn "Rezerwacja usunieta!";
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Taka rezerwacja nie istnieje!";
								temp <- getLine;
								doMain;	
							}
                		}
					"m" -> do{
							putStrLn "Dostepne seanse:\n";
							wyswietlSeanse;
							putStrLn "\nPodaj ID seansu";
							idSeansu <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaSeanse idSeansu);

							if ( check == "yes" ) then do {
								putStrLn "Podaj rzad:";
								rows <- getLine;
								putStrLn "Podaj miejsce:";
								cols <- getLine;
								wynik <- return(jestLiczba rows);
								wynik2 <- return(jestWiekszeOd0 rows);
								wynik3 <- return(jestLiczba cols);
								wynik4 <- return(jestWiekszeOd0 cols);
								check <- (sprawdzCzyMiejsceZajete sciezkaRezerwacja idSeansu rows cols);
								check3 <- (sprawdzCzyMiejsceSprzedane sciezkaSprzedaz idSeansu rows cols);
								check2 <- (sprawdzCzyMiejsceIstnieje sciezkaSeanse idSeansu rows cols);

								if (( wynik == True)&&( wynik2 == True)&&( wynik3 == True)&&( wynik4 == True)&&(check2=="yes")) then do {
									if( (check/="yes") && (check3/="yes") ) then do {
										putStrLn "dane ok";
										ddd <- zwrocDate;
										dodajRekordSprzedazy sciezkaSprzedaz idSeansu rows cols ddd;
										temp <- getLine;
										doMain;
									}
									else do {
										putStrLn "Podane miejsce jest juz zarezerwowane lub wykupione!";
										temp <- getLine;
										doMain;
									}
								}
								else do {
										putStrLn "Podane miejsce nie istnieje!";
										temp <- getLine;
										doMain;
								}
							}
							else do {
								putStrLn "Taki seans nie istnieje!";
								temp <- getLine;
								doMain;	
							}	
                		}
					"n" -> do {
							putStrLn "Dostepne sprzedaze:\n";
							wyswietlSprzedaz;
							putStrLn "\nPodaj ID sprzedazy do usuniecia..";
							ids <- getLine;
							check <- (sprawdzCzyIDIstnieje sciezkaSprzedaz ids);
							
							if (check=="yes") then do {
								-- tutaj
								doDelete sciezkaSprzedaz tempSciezka ids;
								putStrLn "Sprzedaz usunieta!";
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Taki rekord nie istnieje!";
								temp <- getLine;
								doMain;	
							}
                		}
					"z" -> do {
						--miesieczne 
							putStrLn "Podaj rok w postaci YYYY:\n";
							dateRok <- getLine;
							putStrLn "Podaj miesiac w postaci mm:\n";
							dateMiesiac <- getLine;
														
							if ((rokOk dateRok)&&(miesiacOk dateMiesiac)) then do {
								--putStrLn "dane ok";
								-- tutaj modyfikacja / dane:	idseansu->(idsali nazwa dataSeansu)
								
								wyswietlRepertuarMiesieczny dateRok dateMiesiac; 
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
                		}
					"x" -> do {
							putStrLn "Podaj rok w postaci YYYY:\n";
							dateRok <- getLine;
							putStrLn "Podaj miesiac w postaci mm:\n";
							dateMiesiac <- getLine;
							putStrLn "Podaj miesiac w postaci dd:\n";
							dateDzien <- getLine;
							
							
							if ((rokOk dateRok)&&(miesiacOk dateMiesiac)&&(dzienOk dateDzien)) then do {
								
								wyswietlSeanseNaDate dateRok dateMiesiac dateDzien; 
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
                		}
					"v" -> do {
							putStrLn "Podaj rok w postaci YYYY:\n";
							dateRok <- getLine;
							putStrLn "Podaj miesiac w postaci mm:\n";
							dateMiesiac <- getLine;
							
							
							if ((rokOk dateRok)&&(miesiacOk dateMiesiac)) then do {
								
								ile <- wyswietlWynikiSprzedazy dateMiesiac dateRok; 
								putStrLn "W danym miesiacu sprzedano biletow:";
								putStrLn ile;
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
                		}
					"s" -> do {
							putStrLn "Podaj rok w postaci YYYY:\n";
							dateRok <- getLine;

							
							
							if ((rokOk dateRok)) then do {
								
								wyswietlWynikiSprzedazyRoczne dateRok;
								temp <- getLine;
								doMain;
							}
							else do {
								putStrLn "Bledne dane! Wcisnij klawisz aby kontynuowac";
								temp <- getLine;
								doMain;
							}
                		}                  		                		                		
                	--wyswietlRepertuarMiesieczny "2012" "12" 
					--wyswietlSeanseNaDate "2012" "10" "06" 
					--wyswietlWynikiSprzedazy "06" "2013"    
								 
					"w" -> return ()
					_  -> doMain
			}
doStanSal = do putStrLn ("Wybrano 1")

doRead fname = do
				  handler <- openFile fname ReadMode
				  contents <- hGetLine handler
				  
				  --x <- return $ contents
				  --putStrLn x
				  --y <- return $ zmienWiersze $ lines contents
				  --putStrLn $ head $ head $ take 1 $ zmienWiersze $ lines x
				  wczytajWiersz handler
				  hClose handler
				

--zmienWiersze :: 
zmienWiersze[] = []
zmienWiersze(x:xs) = words x : zmienWiersze(xs)    

-----------------------------------------------------
----------- Dodawanie rekordow bo bazy --------------
-----------------------------------------------------
dodajRekordSale fname rows cols name= do
					
					handler <- openFile fname ReadMode
					contents <- hGetContents handler					 
					let x = ileLini contents
					putStrLn $ show $x+1
					hClose handler
					
					
					handler <- openFile fname AppendMode
					hPutStrLn handler ((show $x+1)++" "++name++" "++rows++" "++cols)
					hClose handler
dodajRekordSeans fname idSali name dataSeansu = do
					
					handler <- openFile fname ReadMode
					contents <- hGetContents handler					 
					let x = ileLini contents
					putStrLn $ show $x+1
					hClose handler
					
					
					handler <- openFile fname AppendMode
					hPutStrLn handler ((show $x+1)++" "++idSali++" "++name++" "++dataSeansu)
					hClose handler

dodajRekordRezerwacja fname idSeansu rows cols = do
					
					handler <- openFile fname ReadMode
					contents <- hGetContents handler					 
					let x = ileLini contents
					putStrLn $ show $x+1
					hClose handler
					
					
					handler <- openFile fname AppendMode
					hPutStrLn handler ((show $x+1)++" "++idSeansu++" "++rows++" "++cols)
					hClose handler						

dodajRekordSprzedazy fname idseansu rows cols date = do 
					handler <- openFile fname ReadMode
					contents <- hGetContents handler					 
					let x = ileLini contents
					putStrLn $ show $x+1
					hClose handler
					
					
					handler <- openFile fname AppendMode
					hPutStrLn handler ((show $x+1)++" "++idseansu++" "++rows++" "++cols++" "++date)
					hClose handler						

-----------------------------------------------------
------------- Funkcje pomocnicze --------------------
-----------------------------------------------------	
	
string2int [] = 0
string2int [x] | isDigit x == True = digitToInt x
			   | otherwise = 0
string2int (x:xs) | isDigit x == True = 10^length xs * digitToInt x + string2int xs
				  | otherwise = 0
				  
ileLini contents = length $ lines $ contents 

-- funkcja sprawdza, czy zadany string jest liczba
jestLiczba [] = False
jestLiczba [x] = if isDigit x then True
				 else False
jestLiczba (x:xs) = if isDigit x then jestLiczba xs
					else False
					
-- funkcja sprawdza, czy zadany string jest tekstem
jestTekstem [] = False
jestTekstem [x] = if isAlpha x then True
				  else False
jestTekstem (x:xs) = if isAlpha x then jestTekstem xs
					 else False


jestWiekszeOd0 [] = False
jestWiekszeOd0 x = if (string2int $ x) > 0 then True
						else False
						
jestWiekszeRowne0 [] = False
jestWiekszeRowne0 x = if (string2int $ x) > -1 then True
						else False
						
dzienOk[] = False
dzienOk x = if ((string2int $ x) > 0) && ((string2int $ x) < 32) then True
			else False

miesiacOk[] = False
miesiacOk x = if ((string2int $ x) > 0) && ((string2int $ x) < 13) then True
			else False;
			
rokOk[] = False
rokOk x = if ((string2int $ x) > 2010) && ((string2int $ x) < 9999) then True
			else False;
			
godzinaOk[] = False
godzinaOk x = if ((string2int $ x) > -1) && ((string2int $ x) < 24) then True
			else False;
			
minutaOk[] = False
minutaOk x = if ((string2int $ x) > -1) && ((string2int $ x) < 60) then True
			else False;
			
-- funkcja sluzaca do porownywania dat jezeli x:xs > d:ds to true
sprawdzDate [] [] = True
sprawdzDate (x:xs) [] = False
sprawdzDate (x:xs) (d:ds) = if x == ' ' then False
                            else if x> d then True
                            else if x==d then sprawdzDate xs ds
                            else if x<d then False
                            else False
							
wezDzien x = do {
							dd <- (reverse $ take 2 $ reverse $ take 8 x);
							return $ dd;
						}
						
wezMiesiac x = do {
							dd <- (reverse $ take 2 $ reverse $ take 6 x);
							return $ dd;
						}

wezGodzine x = do {	
							dd <- (reverse $ take 2 $ reverse $ take 10 x);
							return $ dd;
						}

wezMinute x = do {
							dd <- (reverse $ take 2 $ reverse $ take 12 x);
							return $ dd;
						}

wezRok x = do {
							dd <- (take 4 x);
							return $ dd;
						}
						
zwrocDate = do {
				time <- (getClockTime >>= toCalendarTime);
				return $ formatCalendarTime defaultTimeLocale "%Y%m%d%H%M" time;	
			}
			
sprawdzMozliwosc [] = False
sprawdzMozliwosc xs = if ((dzienOk (wezDzien xs))&&(miesiacOk (wezMiesiac xs))&&(rokOk (wezRok xs))&&(godzinaOk (wezGodzine xs))&&(minutaOk (wezMinute xs)) ) then True
						else False;

wczytajWiersz hdl = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								--putStrLn $ head $ head $ take 1 $ zmienWiersze $ lines x;
								if x == [] then return()
								else putStrLn contents;
								wczytajWiersz hdl 
							}
						}

-----------------------------------------------------
------------- Sprawdzanie danych --------------------
-----------------------------------------------------							
sprawdzCzyIDIstnieje fname idSeansu = do
					handler <- openFile fname ReadMode
					check <- (szukajWierszOId handler idSeansu);
					hClose handler
					return $ check;					


szukajWierszOId hdl idSeansu = do {
							t <- hIsEOF hdl;						
							if t then return $ "no"
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ "no"
								else do {
										if ((head(words x)) == idSeansu) then do {
										
											--szukajWierszOId hdl idSeansu;
											--putStrLn x;
											return $ "yes";
											
										}	
									else do {
										
										
										szukajWierszOId hdl idSeansu;
										--return ()
									}
								}
								
							}
						}
						
-- przeszukuje, czy dane miejsce zostalo juz zarezerwowane
sprawdzCzyMiejsceZajete fname idseansu row col = do
					handler <- openFile fname ReadMode
					check <- (szukajMiejsca handler idseansu row col);
					hClose handler
					return $ check;					


szukajMiejsca hdl idseansu row col = do {
							t <- hIsEOF hdl;						
							if t then return $ "no"
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ "no"
								else do {
										if ( (( head $ tail $ words x )==idseansu)&&(( head $ tail $ tail $ words x )==row)&&(( head $ reverse $ words x )==col) ) then do {
											--putStrLn x;
											return $ "yes";
											
										}	
									else do {
										szukajMiejsca hdl idseansu row col;
										--return ()
									}
								}
								
							}
						}
						
-- przeszukuje, czy dane miejsce zostalo juz wykupione
sprawdzCzyMiejsceSprzedane fname idseansu row col = do
					handler <- openFile fname ReadMode
					check <- (szukajMiejscaSell handler idseansu row col);
					hClose handler
					return $ check;					


szukajMiejscaSell hdl idseansu row col = do {
							t <- hIsEOF hdl;						
							if t then return $ "no"
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ "no"
								else do {
										if ( (( head $ tail $ words x )==idseansu)&&(( head $ tail $ tail $ words x )==row)&&(( head $ tail $ tail $ tail $ words x )==col) ) then do {
											--putStrLn x;
											return $ "yes";
											
										}	
									else do {
										szukajMiejscaSell hdl idseansu row col;
										--return ()
									}
								}
								
							}
						}
						
-- ponizsze funkcje przeszukuja dane dotyczace seansow w poszukiwaniu
-- sali, do ktorej seans nalezy. Nastepnie wywoluja nastepne funkcje w
-- celu sprawdzenia, czy podana lokalizacja miejsca jest mozliwa fizycznie				
sprawdzCzyMiejsceIstnieje fname idseansu row col = do
					handler <- openFile fname ReadMode
					check <- (szukajMiejscaExist handler idseansu row col);
					hClose handler
					return $ check;					


szukajMiejscaExist hdl idseansu row col = do {
							t <- hIsEOF hdl;						
							if t then return $ "no"
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ "no"
								else do {
										if ( (( head $ words x )==idseansu) ) then do {
											--putStrLn x;
											-- mamy ID Seansu -> mamy tez ID Sali w ktorej jest...
											salaID <- return( head $ tail $ words x );
											
											check<-(sprawdzCzyMiejsceWSaliIstnieje sciezkaSale salaID row col);
											
											if ( check=="yes" ) then do {
												return $ "yes";
											}
											else do {
												return $ "no";
											}
										}	
									else do {
										szukajMiejscaExist hdl idseansu row col;
										--return ()
									}
								}
								
							}
						}
						
-- ponizsze funkcje przeszukuja dane dotyczace sal i sprawdzaja
-- czy podana lokalizacja miejsca jest mozliwa fizycznie
sprawdzCzyMiejsceWSaliIstnieje fname idsali row col = do
					handler <- openFile fname ReadMode
					check <- (szukajMiejscaWSali handler idsali row col);
					hClose handler
					return $ check;					


szukajMiejscaWSali hdl idsali row col = do {
							t <- hIsEOF hdl;						
							if t then return $ "no"
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ "no"
								else do {
										if ( (( head $ words x )== idsali) ) then do {
											cc <- return(head $ reverse $ words x);
											rr <- return(head $ tail $ reverse $ words x);
										
											if ( ((string2int cc) >= (string2int col)) && ((string2int rr) >= (string2int row)) ) then do {
												return $ "yes";
											}
											else do {
												return $ "no";
											}
										}	
									else do {
										szukajMiejscaWSali hdl idsali row col;
										--return ()
									}
								}
								
							}
						}
						
-------------------------------------------------
--moje
						
						
wyswietlRezerwacjeSeansuNaEkran fname idSeansu = do
					handler <- openFile fname ReadMode
					wczytajWierszOId handler idSeansu
					hClose handler
					
					
					

wczytajWierszOId hdl idSeansu = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x); 
								
								if x == [] then return()
								else do {
										if (y < 5) then do { wczytajWierszOId hdl idSeansu; }
										else do {
											if (head(tail(words x)) == idSeansu) then do {
												
												putStrLn "Miejsce zarezerowane na ten seans";
												putStr "\tRzad\t"; putStrLn (head $ tail $ tail (words x));	
												putStr "\tMiejsce\t"; putStrLn (head $ tail $ tail $ tail (words x));				
												wczytajWierszOId hdl idSeansu;
											}
												
											else do {										
												wczytajWierszOId hdl idSeansu;
											}
										}	
								}
							}
						}

-----------------------------------------------------
------------- Wyswietlanie danych -------------------
-----------------------------------------------------

------------- wyswietl dostepne Sale ----------------
wyswietlSale = do
					handler <- openFile sciezkaSale ReadMode
					wczytajSale handler
					hClose handler

wczytajSale hdl = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x); 
								
								if x == [] then return()
								else do {
									if (y < 5) then do { wczytajSale hdl; }
									else do {
										putStr "ID ["; putStr (head(words x)); putStrLn "]";
										putStr "\tNazwa sali\t"; putStrLn (head(tail(words x)));	
										putStr "\tIlosc rzedow\t"; putStrLn (head $ tail $ tail (words x));	
										putStr "\tIlosc miejsc\t"; putStrLn (head $ tail $ tail $ tail (words x));	
								
									wczytajSale hdl;				
									}
								}
							}
						}

------------- wyswietl dostepne Seanse ----------------
wyswietlSeanse = do
					handler <- openFile sciezkaSeanse ReadMode
					wczytajSeanse handler
					hClose handler

wczytajSeanse hdl = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x); 
								
								if x == [] then return()
								else do {
									if (y < 5) then do { wczytajSeanse hdl; }
										else do {
										putStr "ID ["; putStr (head(words x)); putStrLn "]";
										putStr "\tID sali\t"; putStrLn (head(tail(words x)));	
										putStr "\tNazwa filmu\t"; putStrLn (unwords $ reverse $ tail $ reverse $ tail $ tail $ words(x));
										ddd <- return (head $ reverse $ tail $ tail $ words(x));
										putStr "\tData\t\t";
										putStr (wezDzien ddd); putStr "/";
										putStr (wezMiesiac ddd); putStr "/";
										putStr (wezRok ddd); putStr " ";
										putStr (wezGodzine ddd); putStr ":";
										putStrLn (wezMinute ddd); 
									
										wczytajSeanse hdl;
									}				
								}
							}
						}
						
------------- wyswietl dostepne Rezerwacje ----------------
wyswietlRezerwacje = do
					handler <- openFile sciezkaRezerwacja ReadMode
					wczytajRezerwacje handler
					hClose handler

wczytajRezerwacje hdl = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x); 
								
								if x == [] then return()
								else do {
									if (y < 5) then do { wczytajRezerwacje hdl; }
									else do {	
										putStr "ID ["; putStr (head(words x)); putStrLn "]";
										putStr "\tseans\t"; putStrLn (head $ tail $ words x);
										putStr "\trzad\t"; putStrLn (head $ tail $ reverse $ words x);
										putStr "\tmiejsce\t"; putStrLn (head $ reverse $ words x);
									
										wczytajRezerwacje hdl;				
									}
								}
							}
						}
						
------------- wyswietl dostepne Sprzedaze ----------------
wyswietlSprzedaz = do
					handler <- openFile sciezkaSprzedaz ReadMode
					wczytajSprzedaz handler
					hClose handler

wczytajSprzedaz hdl = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
                                y<-return(length x); 
								--putStr $show y;
								if ((x == [])) then return()
								else do {
									if (y < 5) then do { wczytajSprzedaz hdl; }
										else do {
										putStr "ID ["; putStr (head(words x)); putStrLn "]";
										putStr "\tseans\t\t"; putStrLn (head $ tail $ words x);
										putStr "\trzad\t\t"; putStrLn (head $ tail $ tail $ reverse $ words x);
										putStr "\tmiejsce\t\t"; putStrLn (head $ tail $ tail $ tail $ words x);
									
										ddd <- return (head $ reverse $ words(x));
										putStr "\tData\t\t";
										putStr (wezDzien ddd); putStr "/";
										putStr (wezMiesiac ddd); putStr "/";
										putStr (wezRok ddd); putStr " ";
										putStr (wezGodzine ddd); putStr ":";
										putStrLn (wezMinute ddd); 
								
									wczytajSprzedaz hdl;				
									}
								}
							}
						}
						
-----------------------------------------------------
--------------- Usuwanie danych ---------------------
-----------------------------------------------------

usunWpisOId hdl thdl idWpisu  = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return()
								else do {
										if (head(words x) == idWpisu) then do {
											hPutStrLn thdl "del";
											usunWpisOId hdl thdl idWpisu;
										}	
									else do {
										hPutStrLn thdl x;
										usunWpisOId hdl thdl idWpisu;
										
									}
								}
								
							}
						}	  
						
doDelete fname ftemp idd = do
				  
				  tempHandler <- openFile ftemp WriteMode
				  handler <- openFile fname ReadMode

				  usunWpisOId handler tempHandler idd; 
				  hClose handler;
				  hClose tempHandler;
				  
				  zmienPliki fname ftemp	    

				

zmienPliki fname ftemp = do
				 removeFile fname
				 renameFile ftemp fname
				 handler <- openFile tempSciezka WriteMode
				 hClose handler
				 
				 
				 
-----------------------------------------------------
--------------- Modyfikacja danych ------------------
-----------------------------------------------------


modyfikujWpisOId hdl thdl dana1 dana2 dana3 dana4 = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return()
								else do {
										if (head(words x) == dana1) then do {
											hPutStrLn thdl (dana1++" "++dana2++" "++dana3++" "++dana4);
											modyfikujWpisOId hdl thdl dana1 dana2 dana3 dana4;
										}	
									else do {
										hPutStrLn thdl x;
										modyfikujWpisOId hdl thdl dana1 dana2 dana3 dana4;
										
									}
								}
								
							}
						}	  
						
				  
modyfukujWpis fname ftemp idWpisu nazwa rows cols = do

				  tempHandler <- openFile ftemp WriteMode
				  handler <- openFile fname ReadMode

				  modyfikujWpisOId handler tempHandler idWpisu nazwa rows cols; 
				  hClose handler;
				  hClose tempHandler;
				  
				  zmienPliki fname ftemp;
				  
-----------------------------------------------------
------------------ RAPORTOWANIE ---------------------
-----------------------------------------------------
				  
wyswietlWynikiSprzedazy miesiac rok = do
					handler <- openFile sciezkaSprzedaz ReadMode
					suma <- (wczytajFaktSprzedazy handler miesiac rok "0")
					hClose handler
					return $ suma;

wczytajFaktSprzedazy hdl miesiac rok sum = do {
							t <- hIsEOF hdl;						
							if t then return $ sum
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								
								if x == [] then return $ sum
								else do {
									ddd <- return (head $ reverse $ words(x));
									
									if ( ((wezMiesiac ddd) == miesiac)&&( (wezRok ddd) == rok ) ) then do {
										sum <- return(show ((string2int sum)+1));
										sum <- (wczytajFaktSprzedazy hdl miesiac rok sum);
										return $ sum;
									}
									else do {
										sum <- (wczytajFaktSprzedazy hdl miesiac rok sum);
										return $ sum;
									}
								}
							}
						}
						
wyswietlWynikiSprzedazyRoczne rok = do
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "01" rok "0");
					putStr "Styczen \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "02" rok "0");
					putStr "Luty \t\t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "03" rok "0");
					putStr "Marzec \t\t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "04" rok "0");
					putStr "Kwiecien \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "05" rok "0");
					putStr "Maj \t\t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "06" rok "0");
					putStr "Czerwiec \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "07" rok "0");
					putStr "Lipiec \t\t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "08" rok "0");
					putStr "Sierpien \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "09" rok "0");
					putStr "Wrzesien \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "10" rok "0");
					putStr "Pazdziernik \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "11" rok "0");
					putStr "Listopad \t"; putStrLn ile; hClose handler;
					handler <- openFile sciezkaSprzedaz ReadMode
					ile<-(wczytajFaktSprzedazy handler "12" rok "0");
					putStr "Grudzien \t"; putStrLn ile;
					hClose handler				

-----------------------------------------------------
------------------ REPERTUAR ---------------------
-----------------------------------------------------						
						
wyswietlSeanseNaDate rok mies dz = do
					handler <- openFile sciezkaSeanse ReadMode
					wczytajSeanseWDniu handler rok mies dz 
					hClose handler

wczytajSeanseWDniu hdl rok mies dz = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x);
								if x == [] then return()
								else do {
									if (y < 5) then do { wczytajSeanseWDniu hdl rok mies dz; }
									else do {
										ddd <- return (head $ reverse $ tail $ tail $ words(x));
										
										if ( ((wezMiesiac ddd) == mies)&&( (wezRok ddd) == rok )&&( (wezDzien ddd) == dz ) ) then do {
										
											putStr "ID ["; putStr (head(words x)); putStrLn "]";
											putStr "\tID sali\t"; putStrLn (head(tail(words x)));	
											putStr "\tNazwa filmu\t"; putStrLn (unwords $ reverse $ tail $ reverse $ tail $ tail $ words(x));
											
											putStr "\tData\t\t";
											putStr (wezDzien ddd); putStr "/";
											putStr (wezMiesiac ddd); putStr "/";
											putStr (wezRok ddd); putStr " ";
											putStr (wezGodzine ddd); putStr ":";
											putStrLn (wezMinute ddd); 
											wczytajSeanseWDniu hdl rok mies dz;
										}
										else do {
											wczytajSeanseWDniu hdl rok mies dz;	
										}		
									}
								}
								
							}
						}
						
wyswietlRepertuarMiesieczny rok mies = do
					handler <- openFile sciezkaSeanse ReadMode
					wczytajRepertuarMiesieczny handler rok mies 
					hClose handler

wczytajRepertuarMiesieczny hdl rok mies = do {
							t <- hIsEOF hdl;						
							if t then return()
							else do {
								contents <- hGetLine hdl;
								x<-return(contents);
								y<-return(length x);
								if x == [] then return()
								else do {
									if (y < 5) then do { wczytajRepertuarMiesieczny hdl rok mies; }
									else do{
										ddd <- return (head $ reverse $ tail $ tail $ words(x));
										
										if ( ((wezMiesiac ddd) == mies)&&( (wezRok ddd) == rok ) ) then do {
										
											putStr "ID ["; putStr (head(words x)); putStrLn "]";
											putStr "\tID sali\t"; putStrLn (head(tail(words x)));	
											putStr "\tNazwa filmu\t"; putStrLn (unwords $ reverse $ tail $ reverse $ tail $ tail $ words(x));
											
											putStr "\tData\t\t";
											putStr (wezDzien ddd); putStr "/";
											putStr (wezMiesiac ddd); putStr "/";
											putStr (wezRok ddd); putStr " ";
											putStr (wezGodzine ddd); putStr ":";
											putStrLn (wezMinute ddd); 
											wczytajRepertuarMiesieczny hdl rok mies;
										}
										else do {
											wczytajRepertuarMiesieczny hdl rok mies;	
										}
									}		
								}
							}
						}
						